//
//  HomeViewController.m
//  admin
//
//  Created by admin on 17/2/28.
//  Copyright © 2017年 admin. All rights reserved.
//

#import "LCHomeViewController.h"
#import "ChannelModel.h"
#import "ChannelLabel.h"
#import "LCHomeEssayTableViewCell.h"
#import "LCHomeCollectionViewCell.h"

#define HomeCell @"HomeCell"
@interface LCHomeViewController () <UICollectionViewDataSource,UICollectionViewDelegate>

/// 频道标签滚动视图
@property (weak, nonatomic) IBOutlet UIScrollView *channelScrollView;
/// 滚动视图
@property (weak, nonatomic) IBOutlet UICollectionView *newsCollectionView;

/// 频道标签模型数组
@property (nonatomic, strong) NSArray *channelModels;
/// 频道标签缓存池
@property (nonatomic, strong) NSMutableArray *labelsM;

@end

@implementation LCHomeViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    /// 实例化频道标签缓存池
    _labelsM = [NSMutableArray array];

    // iOS7.0的特性 : 当滚动视图及其子类(UIScrollView/UIWebView/UITablewView/UICollectionView/UITexeView...)在自动布局时,遇到导航,里面的内容会自动的向下偏移64像素.
    self.automaticallyAdjustsScrollViewInsets = NO;

    [self.newsCollectionView registerNib:[UINib nibWithNibName:@"LCHomeCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:HomeCell];
    
    [self createChannelLabels];
    
    [self setupNewsCollectionView];
    
//    if(_channelModels.count == 0){
//          判断是否有无数据
//        UIView *view = [UIView new];
//        view.backgroundColor = [UIColor lightGrayColor];
//        self.view = view;
//        return;
//    }
}

/// 能够执行到这个方法,NewsCollectionView大小一定是正确的
- (void)viewDidAppear:(BOOL)animated {
    
    [super viewDidAppear:animated];
    
}

/// 创建频道标签控件 : 根据频道标签模型数组的元素个数而定的
- (void)createChannelLabels {
    
    [ChannelModel getNewsCateWithSuccBlock:^(NSArray *modelArr) {
        
        if (modelArr != nil){
            [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                _channelModels = modelArr;
                [self.newsCollectionView reloadData];//刷新UI
                // 定义宽高
                CGFloat labelW = self.view.bounds.size.width / _channelModels.count;// 平均分成5份 每份75
                CGFloat labelH = 44; // 也可以指定为父视图的高度
                
                // 遍历频道标签模型数组
                for (NSInteger i = 0; i < _channelModels.count; i++) {
                    // 创建频道标签
                    ChannelLabel *label = [ChannelLabel new];
                    // 添加到父视图
                    [self.channelScrollView addSubview:label];
                    // 获取X值
                    CGFloat labelX = labelW * i;
                    // 布局
                    label.frame = CGRectMake(labelX, 0, labelW, labelH);
                    // 赋值
//                    ChannelModel *model = _channelModels[i];
                    label.text = _channelModels[i];//model.cate;
                    // 创建点击手势
                    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(channelLabelTapClick:)];
                    // 添加到label
                    [label addGestureRecognizer:tap];
                    // 开启交互
                    label.userInteractionEnabled = YES;
                    // 设置tag : 方便在点击时知道当前点击的是第几个
                    label.tag = i;
                    // 把每次创建的label,按顺序添加到容器
                    [_labelsM addObject:label];
                    // 把第0个label默认缩放到最大
                    if (i == 0) {
                        label.scale = 1.0;
                    }
                }
                
                // 设置滚动视图的滚动范围 : height = 0 表示横向滚动
                self.channelScrollView.contentSize = CGSizeMake(labelW * _channelModels.count, 0);
//                self.channelScrollView.contentSize = CGSizeMake(self.view.bounds.size.width, 0);
                
            }];
        }
        
    }];
    
}

/// 设置newsCollectionView
- (void)setupNewsCollectionView {
    
    // 设置数据源/代理
    self.newsCollectionView.dataSource = self;
    self.newsCollectionView.delegate = self;
    // 设置分页效果
    self.newsCollectionView.pagingEnabled = YES;
    // 禁用弹簧效果
    self.newsCollectionView.bounces = NO;

}

/// 频道标签手势点击事件
- (void)channelLabelTapClick:(UITapGestureRecognizer *)tap {
    
    // 1.把选中的频道标签居中
    // 1.1 需要找到点击的是哪个标签
    ChannelLabel *tapLabel = (ChannelLabel *)tap.view;
    // 1.2 计算选中的标签居中时,需要滚动的距离
    CGFloat offsetX = tapLabel.center.x - self.view.bounds.size.width*0.5;
    
    // 1.3 限制最大和最小滚动范围
    CGFloat minOffset = 0;
    CGFloat maxOffset = self.channelScrollView.contentSize.width - self.view.bounds.size.width;
    if (offsetX < minOffset) {
        offsetX = minOffset;
    }
    if (offsetX > maxOffset) {
        offsetX = maxOffset;
    }
    
    // 1.4 获取需要滚动到的点
    CGPoint point = CGPointMake(offsetX, 0);
    // 1.5 频道滚动视图滚动到标签居中的位置
    [self.channelScrollView setContentOffset:point animated:YES];
    
    // 2.新闻视图滚动到对应的item
    // 2.1 获取需要滚动到的item的角标
    NSIndexPath *indexPath = [NSIndexPath indexPathForItem:tapLabel.tag inSection:0];
    // 2.2 滚动到指定的item
    [self.newsCollectionView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionNone animated:NO];
    
    // 遍历所有的label,如果是点击的那个就设置最大缩放比,如果不是点击的那个就把缩放比设置为最小
    for (NSInteger i = 0; i < _labelsM.count; i++) {
        
        // 取出所有的label
        ChannelLabel *label = _labelsM[i];
        // 判断取出的label是否是选中的label,如果是就设置最大缩放比
        if (i == tapLabel.tag) {
            label.scale = 1.0;
        } else {
            label.scale = 0.0;
        }
    }

}

/// 当新闻滚动视图滚动结束后,频道标签居中
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    
    // 计算当前滚动到第几个角标
    NSInteger index = scrollView.contentOffset.x / self.view.bounds.size.width;
    
    // 获取滚动新闻视图时,对应的标签
    ChannelLabel *label = _labelsM[index];
    
    // 计算当滚动新闻视图时,对应的标签居中时需要滚动的距离
    CGFloat offsetX = label.center.x - self.view.bounds.size.width*0.5;
    
    // 限制最大和最小 滚动范围
    CGFloat minOffset = 0;
    CGFloat maxOffset = self.channelScrollView.contentSize.width - self.view.bounds.size.width;
    if (offsetX < minOffset) {
        offsetX = minOffset;
    }
    if (offsetX > maxOffset) {
        offsetX = maxOffset;
    }
    
    // 获取居中时需要滚动到的点
    CGPoint point = CGPointMake(offsetX, 0);
    // 滚动新闻视图时,把对应的标签居中
    [self.channelScrollView setContentOffset:point animated:YES];
}

/// 监听实时滚动,实时缩放
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    
    // 获取当前滚动到的浮点数角标
    CGFloat indexFloat = scrollView.contentOffset.x / self.view.bounds.size.width;
    // 获取当前滚动到的整数角标
    NSInteger index = scrollView.contentOffset.x / self.view.bounds.size.width;
    
    // 缩放的百分比
    CGFloat percent = indexFloat-index;
    
    // 右边的缩放比
    CGFloat rightScale = percent;
    // 左边的缩放比
    CGFloat leftScale = 1 - rightScale;
    // 左边的角标
    NSInteger leftIndex = index;
    // 右边的右边的角标
    NSInteger rightIndex = leftIndex + 1;
    
//    NSLog(@"左=%zd-%f / 右=%zd-%f",leftIndex,leftScale,rightIndex,rightScale);
    
    // 获取左边的label
    ChannelLabel *leftLabel = _labelsM[leftIndex];
    leftLabel.scale = leftScale;
    // 获取右边的label
    if (rightIndex < _labelsM.count) {
        ChannelLabel *rightLabel = _labelsM[rightIndex];
        rightLabel.scale = rightScale;
    }

}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    // 频道标签有多少个就一一对应多少个cell
    return _channelModels.count;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    // 这行代码执行完,就要执行awakeFromNib

    LCHomeCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:HomeCell forIndexPath:indexPath];
    
    
    // 获取NewsCollectionViewCell对应的频道标签对应的模型
//    ChannelModel *model = _channelModels[indexPath.item];
    // 拼接新闻URL
//    NSString *cid = [NSString stringWithFormat:@"%@",model.id];
    // 把拼接好的新闻地址传给cell
//    cell.cid = cid;
    
    //cell.backgroundColor = arc4random_color;//调用随机色;
    
    return cell;
}


@end
